package br.com.werp.regras.mensagem.integracao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.List;

import br.com.werp.regras.geral.Debuger;
import br.com.werp.regras.geral.integracao.MasterDAO;
import br.com.werp.regras.geral.util.Dia;
import br.com.werp.regras.geral.util.Util;
import br.com.werp.regras.geral.vos.mensagem.MensagemVO;
import br.com.werp.regras.geral.vos.tabelas.Mensagem;


/**
 * @author Sobreira
 * Criado em 24/10/2005
 */
public class MensagemDAO extends MasterDAO {
    private static final String NUM_MENSAGEM_NOVA = "NUM_MENSAGEM_NOVA";
    private static final String SOMA = "SOMA";
    private static MensagemDAO mensagemDAO;

    private MensagemDAO(String banco) throws Exception {
        super(banco);
    }

    public static MensagemDAO getMensagemDAO() throws Exception {
        if (mensagemDAO == null) {
            mensagemDAO = new MensagemDAO("");
        }

        return mensagemDAO;
    }

    public int qtdeMensagemNova(String usur_login) throws Exception {
        Connection conn = getConexao();

        try {
            String query = getQuery(NUM_MENSAGEM_NOVA);
            PreparedStatement statement = conn.prepareStatement(query);
            setString(1, statement, usur_login);
            ResultSet set = statement.executeQuery();

            if (set.next()) {
                return set.getInt(SOMA);
            } else {
                return 0;
            }
        } finally {
            liberaConeccao(conn);
        }
    }

    public List pesquisarMensagem(MensagemVO mensagemVO)
        throws Exception {
        Connection connection = getConexao();
        
        try {
            StringBuffer where = new StringBuffer();
            where.append(" mens_conteudo = mscn_id ");

            String tabelas = " mensagem,mensagem_conteudo ";

            if (mensagemVO.getMens_id() != 0) {
                where.append(" and mens_id = " + mensagemVO.getMens_id());
            }

            if (!Util.isNullOrEmpty(mensagemVO.getMens_destinatario())) {
                where.append(" and mens_destinatario = " +
                    aspas(mensagemVO.getMens_destinatario()));
            }

            if (mensagemVO.getMens_data() != null) {
                where.append(" and mens_data like " +
                    new Dia(mensagemVO.getMens_data()).getDataBanco());
            }

            if (!Util.isNullOrEmpty(mensagemVO.getMens_remetente())) {
                where.append(" and mens_remetente = " +
                    aspas(mensagemVO.getMens_remetente()));
            }

            if (!Util.isNullOrEmpty(mensagemVO.getMens_status())) {
                where.append(" and mens_status = " +
                    aspas(mensagemVO.getMens_status()));
            }

            if (!Util.isNullOrEmpty(mensagemVO.getMscn_assunto())) {
                where.append(" and mscn_assunto like " +
                    aspasLike(mensagemVO.getMscn_assunto()));
            }

            if (!Util.isNullOrEmpty(mensagemVO.getMscn_conteudo())) {
                where.append(" and mscn_conteudo like " +
                    aspasLike(mensagemVO.getMscn_conteudo()));
            }

            return preencheVO(connection, mensagemVO, tabelas, where.toString());
        } finally {
            liberaConeccao(connection);
        }
    }

    public void atualizarMensagem(Object key, Mensagem mensagem)
        throws Exception {
        Connection connection = validarTransacao(key);
        atualizarVO(connection, mensagem, new String[] { "mens_id" });
    }
}
